package LabPrueba;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Prueba12 {

	/**
	 * @param args
	 * @throws NoSuchFieldException 
	 * @throws SecurityException 
	 * @throws ClassNotFoundException 
	 * @throws Exception 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws SecurityException, NoSuchFieldException, ClassNotFoundException, InstantiationException, Exception {
		// TODO Auto-generated method stub
		Class clas = Datos.Garantizado.class;
		//Class clas2 = Datos.Avalado.class;
		//Class unCPD = Datos.CPD.class;
		Entidades.CPD unCPD1 = new Entidades.CPD(1, null, null, null, null, 0, null, null);
		Entidades.Avalado unCPD = new Entidades.Avalado(2, null, null, null, null, null, 0, null, null, null, null);
		System.out.println("Probando getClass()                : " + unCPD.getClass());
		System.out.println("Probando getClass().getName()      : " + unCPD.getClass().getName());
		System.out.println("Probando getClass().getSimpleName(): " + unCPD.getClass().getSimpleName());
	//	System.out.println("Probando getClass().getConstructors: " + unCPD.getClass().getConstructors());
	//	System.out.println("Probando getClass().getModifiers() : " + unCPD.getClass().getModifiers());
		System.out.println("Probando getClass().getDeclaredFields: " + unCPD.getClass().getDeclaredFields());
		Field[] campos = unCPD.getClass().getDeclaredFields();
		System.out.println("Cantidad de Campos" + campos.length);
		System.out.println("Campo 1: " + campos[0]);
		Constructor<?>[] constructores = unCPD.getClass().getConstructors();
		System.out.println("Cantidad de Constructores" + constructores.length);
		System.out.println("Campo 1: " + constructores[0]);
		System.out.println("Campo 2: " + constructores[1]);
		Method[] metodos = unCPD.getClass().getMethods();
		System.out.println("Cantidad de Metodos" + metodos.length);
		System.out.println("Campo 1: " + metodos[0]);
		System.out.println("Campo 2: " + metodos[1]);
		System.out.println("Campo 3: " + metodos[2]);
		System.out.println("Campo 4: " + metodos[3]);
		System.out.println("Campo 5: " + metodos[4]);
		System.out.println("Campo 6: " + metodos[5]);
		System.out.println("Campo 7: " + metodos[6]);
		System.out.println("Campo 8: " + metodos[7]);

		Class<?>[] interfaces = unCPD.getClass().getInterfaces();
		System.out.println("Cantidad de Interfaces " + interfaces.length);
		//System.out.println("Probando getClass().getModifiers() : " + unCPD.getClass().cast(interfaces));

		String pepe = "NoGarantizado";
		Class cls = Class.forName(pepe);
		System.out.println("cls pertenece a la clase: " + cls);
		
		//Method[] metodos = unCPD.getClass().getMethods();
	//	Class.forName("NoGarantizado").newInstance();
		
/*
		// "name" is the class name to load
		Class clas = null;
		try {
		  clas = Class.forName(name);
		} catch (ClassNotFoundException ex) {
		  // handle exception case
		}
		// use the loaded class
*/
	}

}
